package com.atguigu.nio.channel;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * 应用实例 3-使用一个Buffer完成文件读取、写入
 *
 * 1) 使用FileChannel（通道）和方法read，write，完成文件的拷贝
 * 2) 拷贝一个文本文件 1.txt , 放在项目下即可
 */
public class NIOFileChannel03 {

    public static void main(String[] args) throws Exception {

        FileInputStream fileInputStream = new FileInputStream("1.txt");
        FileChannel fileChannel01 = fileInputStream.getChannel();

        FileOutputStream fileOutputStream = new FileOutputStream("2.txt");
        FileChannel fileChannel02 = fileOutputStream.getChannel();

        ByteBuffer byteBuffer = ByteBuffer.allocate(512);

        while (true) { // 循环读取
            // 这里有一个重要的操作，一定不要忘了
            byteBuffer.clear(); // 清空buffer（重置标志位）

            int read = fileChannel01.read(byteBuffer);
            if (read == -1) { // 表示读完
                break;
            }

            // 将buffer中的数据写入到fileChannel02 -- 2.txt
            byteBuffer.flip();
            fileChannel02.write(byteBuffer);
        }

        //关闭相关的流
        fileInputStream.close();
        fileOutputStream.close();
    }
}
